<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use App\Models\Model;

class Template extends Model
{
    use HasFactory;

    //设置当前模型使用的数据库连接名
    //protected $connection = 'sqlite';

    //表名定义 一般不设置 
    protected $table = 'template'; 
    //主键
    //protected $primaryKey = 'flight_id';
    //指明模型的 ID 不是自增。
    //public $incrementing = false;
    //如果你模型主键不是 integer，你应该定义一个 protected $keyType 在你的模型上
    //protected $keyType = 'string';

    //是否主动维护时间戳 created_at updated_at 
    //public $timestamps = false;
    //这个属性决定日期属性在数据库的存储方式，以及模型序列化为数组或者 JSON 的格式
    //protected $dateFormat = 'U';
    //自定义存储时间戳的字段名可以在模型中设置 CREATED_AT 和 UPDATED_AT 常量的值来实现
    // const CREATED_AT = 'creation_date';
    //const UPDATED_AT = 'updated_date';


    //默认情况下，新实例化的模型实例将不包含任何属性值。 如果你想为模型的某些属性定义默认值
    // protected $attributes = [
    //     'delayed' => false,
    // ];

    //可以批量赋值的属性
    //protected $fillable = ['name'];
    //protected $guarded = [];

      /**
     * 默认加载的关联
     *
     * @var array
     */
    //protected $with = ['author'];

    /**
     * 条件作用域
     * 
     * 全局作用域
     *  类名 匿名闭包作用域
     * 
     * User::withoutGlobalScope('ancient')->get();
     * User::withoutGlobalScopes([
     *       FirstScope::class, SecondScope::class
     *   ])->get();
     * User::withoutGlobalScopes()->get();
     * 
     * or高阶写法
     * $users = App\Models\User::popular()->orWhere->active()->get();
     * 
     */

    // protected static function booted()
    // {
    //     static::addGlobalScope('ancient', function (Builder $builder) {
    //         $builder->where('created_at', '<', now()->subYears(2000));
    //     });
    // }
        /**
     * 只查询受欢迎的用户的作用域
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    // public function scopePopular($query)
    // {
    //     return $query->where('votes', '>', 100);
    // }

    // /**
    //  * 只查询 active 用户的作用域
    //  *
    //  * @param  \Illuminate\Database\Eloquent\Builder  $query
    //  * @return \Illuminate\Database\Eloquent\Builder
    //  */
    // public function scopeActive($query)
    // {
    //     return $query->where('active', 1);
    // }

      /**
     * 将查询作用域限制为仅包含给定类型的用户
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @param  mixed  $type
     * @return \Illuminate\Database\Eloquent\Builder
     * 
     * $users = User::ofType('admin')->get();
     */
    // public function scopeOfType($query, $type)
    // {
    //     return $query->where('type', $type);
    // }
    



    //事件event
    
    /*************************
     * 模型关联
     * 
     *************************/

    //belongsTo、hasOne、morphTo 和 morphOne hasOneThrough
    /**
     * 关联模型
     *  _item
     *  _items
     * 
     * 1对1
     *  hasOne
     *  belongsTo
     * 1对n
     *  hasMany
     *  belongsTo
     * 
     */
    
    

    /**
     * 
     * 当 belongsTo，hasOne，hasOneThrough 和 morphOne
     * 允许您定义一个默认的模型来返回。这种模式通常被称为 空对象模式
     */
    // public function user()
    // {
    //     return $this->belongsTo(User::class)->withDefault();
    // }
    
    //穿透hasOneThrough 

    //多对多关联
    //belongsToMany 
    //pivot 中间表
    //你想让中间表自动维护 created_at 和 updated_at 时间戳
    //return $this->belongsToMany(Role::class)->withTimestamps();

    //访问器 & 修改器

}